// 钉钉授权
import * as dd from 'dingtalk-jsapi' // 此方式为整体加载，也可按需进行加载
import apiUrl from "@/api/apiUrl.js";
import config from "@/api/config.js";
import store from '@/vuex/store'
import router from '@/router'
// dd.config
export function getDDConfig(callback) {
  if (dd.env.platform !== 'notInDingTalk') {
    let _config = null
    dd.ready(() => {
      const url = window.location.href.split('#')[0]
      apiUrl.nailConfiguration({
        url: url
      }, 'POSTCRM').then((res) => {
        _config = res.data
        console.log('_config',_config)
        if (_config) {
          // 新旧jsapi
          const jsapilist = [
            'chooseDepartments',
            'complexChoose',
            'chooseChat'

            // 'biz.contact.departmentsPicker',
            // 'biz.contact.complexPicker',
            // 'biz.chat.chooseConversationByCorpId'
          ]
          dd.config({
            agentId: _config.agentId,
            corpId: _config.corpId, // 必填，企业ID
            timeStamp: _config.timestamp, // 必填，生成签名的时间戳
            nonceStr: _config.nonceStr, // 必填，生成签名的随机串
            signature: _config.signature, // 必填，签名
            jsApiList: jsapilist // 必填，需要使用的jsapi列表，注意：不要带dd。
          })
          dd.error(function (err) {
            alert('dd error: ' + JSON.stringify(err));
          })//该方法必须带上，用来捕获鉴权出现的异常信息，否则不方便排查出现的问题
        }
      })
    })
  }
}

// 免登登录
export function getCode(callback) {
  if (dd.env.platform !== 'notInDingTalk') {
    let _config = null
    let dingToken = localStorage.getItem('dingToken')
    dd.ready(() => {
      // const url = window.location.href.split('#')[0]
      // apiUrl.nailConfiguration({
      //   url: url
      // },'POSTCRM').then((res) => {
      //   _config = res.data
      //   if(_config) {
      //     // 新旧jsapi
      //     const jsapilist = [
      //       'chooseDepartments',
      //       'complexChoose',
      //       'chooseChat'
      //
      //       // 'biz.contact.departmentsPicker',
      //       // 'biz.contact.complexPicker',
      //       // 'biz.chat.chooseConversationByCorpId'
      //     ]
      //     dd.config({
      //       agentId: _config.agentId,
      //       corpId: _config.corpId, // 必填，企业ID
      //       timeStamp: _config.timestamp, // 必填，生成签名的时间戳
      //       nonceStr: _config.nonceStr, // 必填，生成签名的随机串
      //       signature: _config.signature, // 必填，签名
      //       jsApiList: jsapilist // 必填，需要使用的jsapi列表，注意：不要带dd。
      //     })
      //     dd.error(function (err) {
      //       alert('dd error: ' + JSON.stringify(err));
      //     })//该方法必须带上，用来捕获鉴权出现的异常信息，否则不方便排查出现的问题
      //   }
      // })
      // dd.config({
      //   corpId: config.corpId, // 必填，企业ID
      // })
      console.log('!dingToken', !dingToken)
      // PC端首页地址 配置：https://dingone.test.dingtalk.com/#/index.html 才可调用成功
      if (!dingToken) {
        // 使用SDK 获取免登授权码
        dd.runtime.permission.requestAuthCode({
          corpId: config.corpId,
          onSuccess: (info) => {
            console.log("info", info)
            // 根据钉钉提供的api 获得code后,再次调用这个callback方法
            // 由于是钉钉获取code是异步操作,不知道什么时候执行完毕
            // callback 函数会等他执行完毕后在自己调用自己
            // callback(info.code)
            const param = { code: info.code }
            store.dispatch('getAuthorize', param)
              .then(res => {
                console.log('res', res)
                const { code, data = {} } = res;
                if(code == 0){
                  code == 0 && router.push({ path: '/feedback/feedbackList' })
                  dingToken = data.id
                  // window.location.reload()
                  setTimeout(()=>{
                    window.location.reload()
                  },300)
                }
              })
              .catch((err) => {
                console.log("err", err.response)
                alert('fail')
                alert(JSON.stringify('fail status:' + (err.response&&err.response.status || '')))
              })
          },
          onFail: (err) => {
            alert('fail')
            alert(JSON.stringify('fail status:' + (err.response&&err.response.status || '')))
            // alert(JSON.stringify(err))
          }
        })
      }
    })
  }
}
